//身份证号合法性验证 
//支持15位和18位身份证号
//支持地址编码、出生日期、校验位验证
export function codeValid(code) {
  // 去掉身份证中的空格
  code = code.replace(/\s*/g,"");
  //18位身份证需要验证最后一位校验位
  if (code.length === 15) {
    var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(code);
    if (!check) return false;
  } else if (code.length === 18) {
    var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(code);
    if (!check) return false;
    code = code.split('');
    //加权因子
    var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    //校验位
    var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
    var sum = 0;
    var ai = 0;
    var wi = 0;
    for (var i = 0; i < 17; i++) {
      ai = code[i];
      wi = factor[i];
      sum += ai * wi;
    }
    var last = parity[sum % 11];
    if (parity[sum % 11] != code[17]) {
      return false;
    }
  } else {
    return false;
  }
  return true;
}
